import { isString, isNumber, isUnDef } from '@/utils/index';
import dayjs from 'dayjs';

// 属性格式化-Number
export function propertyFormatByNumber(value, params) {
  // 只处理基础类型
  if (isString(value) || isNumber(value)) {
    // 分为整数部分与小数部分
    let [integerPart, decimalPart] = String(value).split('.');
    const { decimal, accuracy, thousandthSeparator, currencySymbol } = params;
    // 处理千分位
    if (thousandthSeparator) {
      // 兼容千分位，将已有的千分位移除
      integerPart.replace(',', '');
      // 使用正则处理千分位
      integerPart = integerPart.replace(/\d{1,3}(?=(\d{3})+$)/g, (match) => {
        return match + ',';
      });
    }
    // 处理小数
    if (accuracy > 0) {
      decimalPart = isUnDef(decimalPart) ? '0' : decimalPart;
      // 分割并向后补零
      decimalPart = decimalPart.slice(0, accuracy).padEnd(accuracy, '0');
    }
    return `${currencySymbol ? currencySymbol : ''}${integerPart}${
        accuracy > 0 ? decimal + decimalPart : ''
    }`;
  }
  return value;
}

// 属性格式化-Percentage 百分比
export function propertyFormatByPercentage(value, params) {
  if (isString(value) || isNumber(value)) {
    // 分为整数部分与小数部分
    let [integerPart, decimalPart] = String(value * 100).split('.');
    const { decimal, accuracy } = params;
    // 处理小数
    if (accuracy > 0) {
      decimalPart = isUnDef(decimalPart) ? '0' : decimalPart;
      // 分割并向后补零
      decimalPart = decimalPart.slice(0, accuracy).padEnd(accuracy, '0');
    }
    return `${integerPart}${accuracy > 0 ? decimal + decimalPart : ''}%`;
  }
  return value;
}

// 属性格式化-DATE
export function propertyFormatByDate(value, params) {
  try {
    const { dateFormat } = params;
    return dayjs(value).format(dateFormat);
  } catch (error) {
    console.log('error format date ', error);
    return value;
  }
}
